import os
import unittest
import ddt
from common.browser import open_browser
from page.page_index import Index
from page.page_register import Register
from common.data_operation import DataOperation

# 准备数据
# 获取当前工程绝对路径
report = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 存放账号数据的表格名称
file_name = 'data/user_register.xls'
# 路径拼接
file_path = os.path.join(report, file_name)
# 调用数据操作方法
user_register_account = DataOperation(path=file_path, sheet_name='success').get_data_todict()


@ddt.ddt
class TestUserRegisterSuccess(unittest.TestCase):
    # 大夹具,在所有测试方法执行之前打开浏览器
    @classmethod
    def setUpClass(cls) -> None:
        # 打开浏览器
        driver = open_browser()
        # 创建首页page和注册page的实例对象
        cls.index = Index(driver)
        cls.register = Register(driver)

    @ddt.data(*user_register_account)
    def test_method(self, data):
        # 请求网址
        self.index.get(self.index.index_url)
        self.index.implicitly_wait()
        # 点击请注册
        self.index.btn_index_register()

        # 注册操作
        self.register.ipt_username(data['username'])  # 用户名
        self.register.ipt_email(data['email'])        # 邮箱
        self.register.ipt_password1(data['password1'])  # 密码
        self.register.ipt_password(data['password2'])  # 确认密码
        self.register.tel(data['tel'])  # 手机
        self.register.btn_register()  # 点击注册
        # 断言注册成功
        username = self.index.username_text()
        self.assertEqual(data['username'], username)

    # 小夹具,每个账号登录后需要先退出登录
    def tearDown(self) -> None:
        self.index.btn_quit_login()

    #  大夹具,关闭浏览器
    @classmethod
    def tearDownClass(cls) -> None:
        cls.index.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)


